package com.iweb.day04;

/**
 * @author WuYongheng
 * @date 2021/10/25
 * @description 使用二分法查找算法，查找某个数字在数组中出现的位置，
 *  如果找到了，打印输出相应的位置，没有找到，则打印出未找到。(用工具类定义通过方法)
 */
public class Exam2 {
    public static void main(String[] args) {

        int[] scores = {23, 34, 45, 56, 67, 78, 89};

        // 要查找的数
        int target= 56;
        // 保存查到的元素的下标
        int index = -1;
        // 保存最小值的位置
        int min = 0;
        // 保存最大值的位置
        int max = scores.length - 1;
        // 保存中间值的位置，每次循环开始前，要计算出来
        int mid = 0;

        boolean isFind=false;
        // 每当min和max在正常范围时，继续循环
        while (min <= max) {
            // 每次循环开始前，要计算mid的值
            mid = (min + max) / 2;
            // 开始干活
            // 比较目标对象与min位置元素的大小
            if (target < scores[mid]) {
                // 小于
                // 需要向左边查找
                max = mid - 1;
            } else if (target > scores[mid]) {
                // 大于
                // 需要向右边查找，改变min的值
                min = mid + 1;
            } else {
                // 等于
                // 找到了
                index=mid;
                isFind=true;
                break;
            }
        }
        if(isFind) {
            System.out.printf("找到了! %d在数组中下标位置是：%d\n", target, index);
        }else {
            System.out.println("没找到");
        }
    }

}
